package com.decorate.demo05;

import lombok.Data;

import java.text.NumberFormat;
import java.time.LocalDateTime;
import java.util.Vector;

/**
 * 1.抽象构建类- 需要抽象装饰角色 OrderDecorator 装饰
 *
 * 包含了添加商品和删除商品的操作，以及将每一种商品的明细打印在发票上
 */
@Data
public abstract class Order {
    // 客户姓名
    public String customerName;
    // 销售日期
    public LocalDateTime salesDate;

    // 存储 OrderLine 销售单条记录明细
    public Vector<OrderLine> items = new Vector(10);

    public void print(){
        for (int i = 0; i < items.size(); i++) {
            OrderLine orderLine = items.get(i);
            orderLine.printLine();
        }
    }

    // 购买一种商品
    public void addItem(OrderLine item){
        items.add(item);
    }
    // 舍弃一种商品
    public void removeItem(OrderLine item){
        items.remove(item);
    }
    // 获得所有商品的总金额
    public double getTotal(){
        double total=0.0;
        for (int i = 0; i < items.size(); i++) {
            OrderLine orderLine = items.get(i);
            total += orderLine.getSubTotal();
        }
        return total;
    }
    protected String formatCurrency(double money){
        return NumberFormat.getCurrencyInstance().format(money);
    }

}
